package com.atguigu.lease.web.admin.schedule;

import com.atguigu.lease.model.entity.LeaseAgreement;
import com.atguigu.lease.model.enums.LeaseStatus;
import com.atguigu.lease.web.admin.service.LeaseAgreementService;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
@Slf4j//日志
public class ScheduledTasks {

    @Autowired
    private LeaseAgreementService leaseAgreementService;

    /**
     * todo 定时功能: 秒 分 时 日 月 周 年(不写表示每年)
     *  ? 用于日与周 冲突,只写一个,另一个?
     *  * 表示每一个合法的值:秒([0,59]),分([0,59]),时([0,23]), 日([1,31]), 月([1,12]), 周([1,7])
     *  , 表示多个值分割
     *  0/5 表示从0秒开始,没过5秒执行一次
     *  0-5 表示一个指定范围
     *  L 表示月或周最后一天
     *  # 只能用于周, 6#3 表示第三周的第6天(周五)
     *  W 只能用于日, 表示离指定日最近的工作日
     */
    @Scheduled(cron = "0 0 0 * * ?")
    public void checkLeaseStatus() {
        log.info("开始执行定时任务");
        Date now = new Date();//获取当前时间
        LambdaUpdateWrapper<LeaseAgreement> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.le(LeaseAgreement::getLeaseEndDate,now)//le:小于等于
                     .in(LeaseAgreement::getStatus,LeaseStatus.SIGNED,LeaseStatus.WITHDRAWING)//in:存在
                     .set(LeaseAgreement::getStatus,LeaseStatus.EXPIRED);//set:修改
        /*updateWrapper.le(LeaseAgreement::getLeaseEndDate, now);
        updateWrapper.in(LeaseAgreement::getStatus, LeaseStatus.SIGNED, LeaseStatus.WITHDRAWING);
        updateWrapper.set(LeaseAgreement::getStatus, LeaseStatus.EXPIRED);*/
        leaseAgreementService.update(updateWrapper);
    }
}